/**
 * 
 */
package com.proyecto.personas.modelo.servicio;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.modelo.echo.constantes.TipoBusqueda;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.personas.modelo.dto.ConfigDetailDir;
import com.proyecto.personas.modelo.dto.CorrelativosPersId;

/**
 * @author javaOne
 *
 */
public class ServicioConfigDetailDir extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosPersonas 	servicioCorrelativosPersona;
	
	public ServicioConfigDetailDir() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		//super.incluir(pojo, iniciaTransaccion);
		ConfigDetailDir objConfigDetailDir = (ConfigDetailDir)pojo;
		
		if (isValidacionActiva()){
			validacion.incluir(objConfigDetailDir);
		}
		
		try {
			Long proxNumero = servicioCorrelativosPersona.obtenerProximoNumeroComoEntero(
					new CorrelativosPersId(objConfigDetailDir.getId().getCiaopr(),"CONFDETAILDIR","confdetdircod"),true);
			
			System.out.println("proxNumero" + proxNumero);
			
			objConfigDetailDir.getId().setConfdetdircod(proxNumero.intValue());
			
			super.incluir(objConfigDetailDir, iniciaTransaccion);
			
		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			throw new GeneralException(
					"error." + claveProperties + ".desconocido");
		}
	}
	
	

	public Integer buscarConfigDetailDirCod_x_localidad(String ciaOpr, String localidadcod){
		Integer nroConfdetdircod = -1;
		
		try{
		    if (localidadcod != null && !"".equals(localidadcod) ){
		        String[] atributo = {"id.ciaopr","localidadcod"};
		        Object[] valor = {ciaOpr, localidadcod, localidadcod};
		        List<ConfigDetailDir> listConfigDetailDir = this.buscarCatalogoPorPropiedad(atributo, valor, TipoBusqueda.OPE_IGUAL);
		        nroConfdetdircod = listConfigDetailDir.get(0).getId().getConfdetdircod();
	        }
		}catch (GeneralException e) {

		}
		return nroConfdetdircod;
	}

	public Integer buscarConfigDetailDirCod_x_localidadNombre(String ciaOpr, String localidadcod, String confdetdirnombre){
		Integer nroConfdetdircod = -1;
		
		try{
		    if (localidadcod != null && !"".equals(localidadcod)&&
		    		confdetdirnombre != null && !"".equals(confdetdirnombre) ){
		        String[] atributo = {"id.ciaopr","localidadcod","confdetdirnombre"};
		        Object[] valor = {ciaOpr, localidadcod, localidadcod, confdetdirnombre};
		        List<ConfigDetailDir> listConfigDetailDir = this.buscarCatalogoPorPropiedad(atributo, valor, TipoBusqueda.OPE_IGUAL);
		        nroConfdetdircod = listConfigDetailDir.get(0).getId().getConfdetdircod();
	        }
		}catch (GeneralException e) {

		}
		return nroConfdetdircod;
	}

	public ServicioCorrelativosPersonas getServicioCorrelativosPersona() {
		return servicioCorrelativosPersona;
	}

	public void setServicioCorrelativosPersona(
			ServicioCorrelativosPersonas servicioCorrelativosPersona) {
		this.servicioCorrelativosPersona = servicioCorrelativosPersona;
	}
}
